package br.com.aspas.persistencia;

import br.com.aspas.modelo.Evento;
import br.com.aspas.modelo.PessoaFisicaJuridicaEvento;
import br.com.aspas.modelo.PessoaFisicaJuridicaEventoPK;
import br.com.aspas.util.AbstractDAO;
import java.util.Date;
import java.util.List;

public class PessoaFisicaJuridicaEventoDao extends AbstractDAO {

    public List<PessoaFisicaJuridicaEvento> findPFCpfEvento(String nome, Integer evento) {
        List<PessoaFisicaJuridicaEvento> list = null;
        em = emf.createEntityManager();
        String cpf = null;
        nome = nome.replace(".", "");
        nome = nome.replace("-", "");
        for (int i = 0; i < nome.length(); i++) {
            if (i == 2) {
                cpf = nome.substring(0, 3).concat(".");
            }
            if (i == 5) {
                cpf = cpf + nome.substring(3, 6).concat(".");
            }
            if (i == 8) {
                cpf = cpf + nome.substring(6, 9).concat("-");
            }
            if (i == 9) {
                cpf = cpf + nome.substring(9);
            }
        }
        nome = cpf;
        list = em.createQuery("SELECT object(pf) FROM PessoaFisicaJuridicaEvento as pf  "
                + " where pf.pessoaFisica.cpf like '" + nome + "%' and pf.evento.codigo=" + evento + " "
                + " order by pf.pessoaFisica.nome  ").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findPFCodigo(Integer codigo, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery(" SELECT object(pf) FROM PessoaFisicaJuridicaEvento as pf  "
                + " where pf.pessoaFisica.codigo =" + codigo + " and pf.evento.codigo=" + evento + " "
                + " order by pf.pessoaFisica.nome  ").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findRgEvento(String rg, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> listPessoaFisica = em.createQuery("SELECT object(pf) FROM PessoaFisicaJuridicaEvento as pf  "
                + " where pf.pessoaFisica.rg like '" + rg + "' and pf.evento.codigo=" + evento + " "
                + " order by pf.pessoaFisica.nome  ").getResultList();
        em.close();
        return listPessoaFisica;
    }

    public List<PessoaFisicaJuridicaEvento> findAllPessoaFisicaJuridicaEvento(String nome, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery(" SELECT object(pf) FROM PessoaFisicaJuridicaEvento as pf  "
                + " where pf.pessoaFisica.nome like '%" + nome + "%' and pf.evento.codigo=" + evento + " "
                + " order by pf.pessoaFisica.nome  ").getResultList();
        em.close();
        return list;
    }



    public void inserir(PessoaFisicaJuridicaEvento pessoaFisicaJuridicaEvento) {
        pessoaFisicaJuridicaEvento.setDataInclusao(new Date());
        insert(pessoaFisicaJuridicaEvento);
    }

    public PessoaFisicaJuridicaEvento findByPk(Integer pKey) {
        return (PessoaFisicaJuridicaEvento) findByPk(PessoaFisicaJuridicaEvento.class, pKey);
    }

    public Boolean remove(PessoaFisicaJuridicaEventoPK id) {
        delete(id, PessoaFisicaJuridicaEvento.class);
        return new Boolean(true);
    }

    public Boolean removePessoaId(Integer pessoaId) {
        deleteDinamic("PessoaFisicaJuridicaEvento p", " where p.pessoaFisicaJuridicaEventoPK.pessoaFisica.codigo=" + pessoaId + "");
        return new Boolean(true);
    }

    public void altera(PessoaFisicaJuridicaEvento pessoaFisicaJuridicaEvento)  {
        update(pessoaFisicaJuridicaEvento);
    }

    public List<PessoaFisicaJuridicaEvento> findAllPessoaFisicaJuridicaEvento() {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p order by p.pessoaFisicaJuridicaEventoPK.pessoaFisica.nome desc").getResultList();
        em.close();
        return list;
    }

    public PessoaFisicaJuridicaEvento findAllPFisicaJuridicaEvento(Integer pessoaFisica, Evento evento) {
        em = emf.createEntityManager();
        PessoaFisicaJuridicaEvento pfpj = null;
        try {
            pfpj = (PessoaFisicaJuridicaEvento) em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                    " where p.pessoaFisica.codigo=" + pessoaFisica + " and " +
                    " p.evento.codigo = "+evento.getCodigo()).getSingleResult();
        } catch (Exception e) {
            pfpj = null;
        }
        em.close();
        return pfpj;
    }

    public String findPFPJEmpresa(Integer pessoaFisica) {
        em = emf.createEntityManager();
        PessoaFisicaJuridicaEvento pfpj = new PessoaFisicaJuridicaEvento();
        String empresa;

        try {
            pfpj = (PessoaFisicaJuridicaEvento) em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                    " where p.pessoaFisicaJuridicaEventoPK.pessoaFisica.codigo=" + pessoaFisica + "").getSingleResult();
            empresa = pfpj.getPessoaJuridica().getNomeFantasia();
            empresa = null;
        } catch (Exception e) {
            empresa = "Participante sem Empresa";
        } finally {
            em.close();
        }
        return empresa;
    }

    public List<PessoaFisicaJuridicaEvento> findALLPFisicaJuridica(Integer pessoaJuridica) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaJuridica.codigo=" + pessoaJuridica + " ").getResultList();
        em.close();
        return list;
    }

    public PessoaFisicaJuridicaEvento findAllPFisicaJuridicaEvento(Integer pessoaFisica, Integer evento) {
        em = emf.createEntityManager();
        PessoaFisicaJuridicaEvento pessoaFisicaJuridicaEvento = (PessoaFisicaJuridicaEvento) em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaFisicaCodigo=" + pessoaFisica + " and p.pessoaFisicaJuridicaEventoPK.eventoCodigo=" + evento + " ").getSingleResult();
        em.close();
        return pessoaFisicaJuridicaEvento;
    }

    public List<PessoaFisicaJuridicaEvento> findALLPFisicaJuridica(Integer pessoaJuridica, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaJuridica.codigo=" + pessoaJuridica + " and p.evento.codigo=" + evento + "  order by p.pessoaFisica.codigo desc").getResultList();
        em.close();
        return list;
    }

    public PessoaFisicaJuridicaEvento findPFisicaJuridica(Integer pessoaJuridica, Integer evento, Integer pessoaFisica) {
        em = emf.createEntityManager();
        PessoaFisicaJuridicaEvento pessoaFisicaJuridicaEvento = (PessoaFisicaJuridicaEvento) em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaJuridica.codigo=" + pessoaJuridica + " and p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " and p.pessoaFisicaJuridicaEventoPK.pessoaFisica.codigo=" + pessoaFisica + "").getSingleResult();
        em.close();
        return pessoaFisicaJuridicaEvento;
    }

    public List<PessoaFisicaJuridicaEvento> findPFisicaJuridicaCodigoPF(Integer pessoaFisica, Integer evento) {
        em = emf.createEntityManager();

        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " and p.pessoaFisicaJuridicaEventoPK.pessoaFisica.codigo=" + pessoaFisica + "").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findPFisicaJuridicaCPF(String nomeCpf, Integer evento) {
        em = emf.createEntityManager();
        System.out.println("Valor CPF dentro do DAO: "+nomeCpf);
        String cpf = null;
        nomeCpf = nomeCpf.replace(".", "");
        nomeCpf = nomeCpf.replace("-", "");
        for (int i = 0; i < nomeCpf.length(); i++) {
            if (i == 2) {
                cpf = nomeCpf.substring(0, 3).concat(".");
            }
            if (i == 5) {
                cpf = cpf + nomeCpf.substring(3, 6).concat(".");
            }
            if (i == 8) {
                cpf = cpf + nomeCpf.substring(6, 9).concat("-");
            }
            if (i == 9) {
                cpf = cpf + nomeCpf.substring(9);
            }
        }
        nomeCpf = cpf;

        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " and p.pessoaFisicaJuridicaEventoPK.pessoaFisica.cpf like'" + nomeCpf + "%'").getResultList();
        em.close();
        return list;

    }

    public List<PessoaFisicaJuridicaEvento> findAllPFisicaJuridicaEventoNome(String nomePessoaFisica, Integer evento, Integer pessoaJuridica) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisica.nome like'%" + nomePessoaFisica + "%' and p.evento.codigo=" + evento + " and p.pessoaJuridica.codigo=" + pessoaJuridica + " ").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findAllPFisicaJuridicaEventoNome(String nomePessoaFisica, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaFisica.nome like'%" + nomePessoaFisica + "%' and p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " ").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findAllPFisicaJuridicaEventoRazao(String razao, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaJuridica.razaoSocial like'%" + razao + "%' and p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " ").getResultList();
        em.close();
        return list;
    }

    public List<PessoaFisicaJuridicaEvento> findAllPFisicaJuridicaEventoFantasia(String fantasia, Integer evento) {
        em = emf.createEntityManager();
        List<PessoaFisicaJuridicaEvento> list = em.createQuery("SELECT object(p) FROM PessoaFisicaJuridicaEvento as p " +
                " where p.pessoaFisicaJuridicaEventoPK.pessoaJuridica.nomeFantasia like'%" + fantasia + "%' and p.pessoaFisicaJuridicaEventoPK.evento.codigo=" + evento + " ").getResultList();
        em.close();
        return list;
    }
}

